package it.univaq.mwt.arssa.business.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;

import it.univaq.mwt.arssa.business.BusinessException;
import it.univaq.mwt.arssa.business.SecurityService;
import it.univaq.mwt.arssa.business.model.Dipendente;
import it.univaq.mwt.arssa.business.model.Ruolo;
import it.univaq.mwt.arssa.business.model.Sede;


public class JDBCSecurityService implements SecurityService {

	private DataSource dataSource;
	
	public JDBCSecurityService(DataSource dataSource) {
		this.dataSource = dataSource; 
	}
	
	
	@Override
	public Dipendente authenticate(String username, String password) throws BusinessException {
		Connection con = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		Dipendente result = null;
		try {
			con = dataSource.getConnection();
			st = con.prepareStatement("SELECT * FROM DIPENDENTI WHERE username = ? and password = ?");
			st.setString(1, username);
			st.setString(2, password);
			rs = st.executeQuery();
			if (rs.next()) {
				int id = rs.getInt("ID");
				String matricola = rs.getString("MATRICOLA");
				String nome = rs.getString("NOME");
				String cognome = rs.getString("COGNOME");
				String codiceFiscale = rs.getString("CODICEFISCALE");
				String email = rs.getString("EMAIL");
				String cellulare = rs.getString("CELLULARE");
				int ruolo = rs.getInt("IDRUOLO");
				int sede = rs.getInt("IDSEDE");
				int ferieRimanenti = rs.getInt("FERIERIMANENTI");
				String straordinari = rs.getString("STRAORDINARI");
				String citta = rs.getString("CITTA");
				String via = rs.getString("VIA");
				String numeroCivico = rs.getString("NUMEROCIVICO");
				
				JDBCRuoliService serviceRuolo = new JDBCRuoliService(dataSource);
				JDBCSediService serviceSede = new JDBCSediService(dataSource);
				Ruolo r1 = serviceRuolo.cercaRuolo(ruolo);
				Sede s1 = serviceSede.cercaSede(sede);
				result = (new Dipendente(id, matricola, username, password, nome, cognome, codiceFiscale, email, cellulare, citta, via, numeroCivico, r1, s1, ferieRimanenti, straordinari));
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e);
		} finally {
			if (st != null) {
				try {
					st.close();
				} catch (SQLException e) {
				}
			}
			if (con != null) {
				try {
					con.close();
				} catch (SQLException e) {
				}
			}

		}
		return result;
	}

}
